from functools import wraps

from utils.base_util import LogHandler


def excepters(mcm):
    """
    异常处理装饰器，在每个可能存在异常的方法中都可以使用，
    如果出现异常会返回None并将异常信息保存在日志中
    :param mcm: modulename.classname.methodname
    :return: object
    """
    def except_execute(func):
        @wraps(func)  # 保存原有函数或方法的函数名和文档字符串
        def except_handle(*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except Exception as e:
                LogHandler.record(mcm, str(e))
                return None
        return except_handle
    return except_execute